package find.the.number.of.duplicate;

import java.util.HashSet;

/**
 * @Time 2019/12/11
 * @author 王光浩
 * @Method 需求：给定一个整形数组，判断其中是否有重复数字，如果有返回true，否则返回false
 *         思路：使用hashset来解决该题，每次将数组的元素插入hashset中如果集合中包含该数字则返回true，否则插入数字。
 *         复杂度：时间复杂度——不考虑hashset中的操作，为O（n），空间复杂度为O（n）
 *         改进：看了HashSet集合的add方法，在加入重复元素是如果元素已经存在则返回false，所以我们可以对方法进行简化。
 *
 */
public class MyMethodOne {
    public boolean containsDuplicate(int[] nums) {
    	HashSet<Integer> judge=new HashSet<Integer>();
    	int len=nums.length;
    	//使用for循环将数字不断插入hashset中
    	for(int i=0;i<len;i++) {
    		if(judge.contains(nums[i]))
    			return true;
    		judge.add(nums[i]);
    	}
        return false;
    }
    
    /**这样做的好处：在上面的一个方法中当使用contain方法时会对数据进行判断，然后在调用add方法时同样会对插入的数据进行判断
     * ，而现在我们只需要使用add方法就可以完成该任务。*/
    public boolean containsDuplicateVersion1(int[] nums) {
    	HashSet<Integer> judge=new HashSet<Integer>();
    	int len=nums.length;
    	//使用for循环将数字不断插入hashset中
    	for(int i=0;i<len;i++) {
    		if(!judge.add(nums[i]))
    			return true;
    	}
        return false;
    }
}
